﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using CapaDeDatos;
using CapaDeDominio;
using CapaDeDatos.EF;
using Spring.Core;
using Spring.Context;
using CapaDeNegocio;
using Spring.Context.Support;

namespace CapaDePrueba
{
    [TestFixture]
    public class TestInstrumentoDAO
    {
        // Atributos a utilizar durante las pruebas
        private IInstrumentoDAO instrumentoDAO = null;
        private ISalaDAO salaDAO = null;
        private MaestraDAO maestraDAO = null;
        [TestFixtureSetUp]
        public void Inicilizar()
        {
            maestraDAO = new MaestraDAO();
            instrumentoDAO = new InstrumentoDAO();
            salaDAO = new SalaDAO();
        }

        [Test]
        public void CreacionInstrumento()
        {
            // 1. Definimos la implementación del DAO a probar (EF)

            ICollection<Sala> lstSala = salaDAO.ListarTodos();
            Sala firstSala = lstSala.ElementAt(0);

            Instrumento nuevoInstrumento = new Instrumento() { Tipo = maestraDAO.Obtener(1), Alquiler = 12, AnioFabricacion = 1982, Caracteristicas = "Buen sonido", Marca = "Marshall", Modelo = "K999" };
            instrumentoDAO.Crear(nuevoInstrumento);

            Assert.IsNotNull(nuevoInstrumento);

            ICollection<Instrumento> lstInstrumento = instrumentoDAO.ListarTodos();
            Assert.Greater(lstInstrumento.Count, 0);
        }

        [Test]
        public void ValidacionXNombre()
        {
            String caracteristicas = "Buen sonido";
            ICollection<Instrumento> resultado = instrumentoDAO.ObtenerXCaracteristica(caracteristicas);

            Assert.AreNotEqual(resultado.Count, 0);
        }

        [Test]
        public void AsignacionInstrumentoSala()
        {
            ICollection<Sala> lstSala = salaDAO.ListarTodos();
            Sala firstSala = lstSala.ElementAt(0);

            ICollection<Instrumento> resultado = instrumentoDAO.ObtenerXCaracteristica("Buen sonido");
            Instrumento InstObtenido = null;

            if (resultado.Count > 0)
            {
                InstObtenido = resultado.ElementAt(0);
            }

            Assert.IsNotNull(InstObtenido);
            ICollection<Instrumento> InstSala = firstSala.Instrumentos;

            Assert.IsTrue(InstSala.Contains(InstObtenido));

            InstSala.Add(InstObtenido);
            firstSala.Instrumentos = InstSala;
        }
    }

}